<?php if(!defined('CALL')) exit('No direct script access allowed');

include_once('lib/mysql.class.php');
include_once('lib/utils.class.php');
include_once('lib/logger.class.php');
include_once('models/m_events.class.php');
include_once('cfg/cfg.php');

class mEventLinks
{
	// инициализация объектов доступа к БД
	public static function init()
	{
		if(is_null(self::$db))
		{
			global $dburl, $def_encoding;
			MySQL::$url = $dburl;
			MySQL::$encoding = $def_encoding;
			self::$db = MySQL::getInstance();
		}
	}

	public static function insert($event_id, $categ, $note, $actor)
	{
		Logger::Write(__FILE__." ".__FUNCTION__." line: ".__LINE__, "event_id=[$event_id], categ=[$categ], note=[$note], actor=[".$actor->id."]");
		self::init();
		
		// проверяем права доступу актора к событию
		$event = mEvents::get2($event_id, $actor);
		
		if($event == null) return FALSE;
		
		// Связи типа "COM" - комметарий можно вставлять много,
		// в остальных случаях может существовать только одна связь
		$uniq = (bool)($categ != 'COM');
		$allow = TRUE;
		
		if($uniq)
		{
			$sql = "SELECT id FROM event_users ".
				"WHERE user_id = ".$actor->id." AND event_id = $event_id AND categ = '$categ'";
			if(LOG_SQL)
				Logger::Write(__FILE__." ".__FUNCTION__." line: ".__LINE__, $sql);
			$res = self::$db->query($sql);
			$allow = (bool)(self::$db->num_rows($res) == 0);
			self::$db->free_result($res);
		}
		
		if($allow)
		{
			$note = self::$db->escape($note);
			$sql =
				"INSERT INTO event_users(user_id, event_id, categ, note) ".
				"VALUES(".$actor->id.", $event_id, '$categ', $note)";
			if(LOG_SQL)
				Logger::Write(__FILE__." ".__FUNCTION__." line: ".__LINE__, $sql);

			self::$db->query($sql);
			$id = self::$db->insert_id();
			
			if(self::$db->affected_rows() > 0)
			{
				if(empty($actor->props)) $actor->load();
				
				
				$e_link = ROOT_URL."/".$event_id."/event";
				$u = '<a href="'.ROOT_URL.'/'.$actor->id.'/plans">'.$actor->props['username'].'</a>';
				switch($categ)
				{
					case 'COM':
						$categ = 'COMMENT';
						$msg = $u.' прокомментировал Ваше <a href="'.$e_link.'/comments">событие</a>'; 
						break;
					
					case 'SHA':
						$categ = 'SHARE';
						$msg = $u.' будет участвовать в Вашем \<a href="'.$e_link.'/share">событии</a>'; 
						break;
					
					case 'SPA':
						mEvents::spam_add($event_id, 1);
						$categ = 'SPAM';
						$msg = $u.' считает Ваше <a href="'.$e_link.'">событие</a> спамом'; 
						break;
					
					default:
						$msg = 'ERROR';
						$categ = 'SYS';
						break;
					
				}
				mMessages::insert($actor->id, $event['user_id'], $categ, $msg);
			}
			
			return $id;
		}
		else
			return FALSE;		
	}
	
	public static function update($uid, $event_id, $date_uni, $time, $access, $note)
	{
		self::init();
	}
	
	
	public static function delete($event_id, $categ, $actor, $comment_id = null)
	{
		self::init();

		if($categ == 'COM')
			return self::delete_comment($comment_id, $actor);
		else
			return self::delete_single_link($event_id, $categ, $actor);
	}
	
	private static function delete_single_link($event_id, $categ, $actor)
	{
		// проверяем права доступу актора к событию
		$event = mEvents::get2($event_id, $actor);
		if($event == null) return FALSE;
		
		$sql = "DELETE FROM event_users WHERE event_id = $event_id AND categ= '$categ'";
		if(LOG_SQL) Logger::Write(__FILE__." ".__FUNCTION__." line: ".__LINE__, $sql);
		
		$res = self::$db->query($sql);
		
		if(self::$db->affected_rows() > 0)
		{
			if(empty($actor->props)) $actor->load();
			
			$e_link = ROOT_URL."/".$event_id."/event";
			$u = '<a href="'.ROOT_URL.'/'.$actor->id.'/plans">'.$actor->props['username'].'</a>';
			switch($categ)
			{
				case 'COM':
					// удаление комментария не сопровождается уведомлением
					return TRUE;
					break;
				
				case 'SHA':
					$categ = 'SHARE';
					$msg = $u.' не будет участвовать в Вашем \<a href="'.$e_link.'">событии</a>'; 
					break;
				
				case 'SPA':
					mEvents::spam_add($event_id, -1);
					$categ = 'SPAM';
					$msg = $u.' не считает Ваше <a href="'.$e_link.'">событие</a> спамом'; 
					break;
				
				default:
					$msg = 'ERROR';
					$categ = 'SYS';
					break;
				
			}
			mMessages::insert($actor->id, $event['user_id'], $categ, $msg);
			
			return TRUE;
		}

		return FALSE;
	}
	
	private static function delete_comment($comment_id, $actor)
	{
		// удаляется только явно указанный комментарий
		if(is_null($comment_id)) return FALSE;
		
		// проверка принадлжености удаляемого комментария актору
		$sql = "SELECT user_id FROM event_users WHERE id = $comment_id";
		if(LOG_SQL)
			Logger::Write(__FILE__." ".__FUNCTION__." line: ".__LINE__, $sql);
		$res = self::$db->query($sql);
		$row = self::$db->fetch_assoc($res);
		if($row["user_id"] == $actor->id)
		{
			$sql = "DELETE FROM event_users WHERE id = $comment_id";
			if(LOG_SQL)
				Logger::Write(__FILE__." ".__FUNCTION__." line: ".__LINE__, $sql);
			
			$res = self::$db->query($sql);
			return (bool)(self::$db->affected_rows() > 0);
		}
		else
		{
			return FALSE;
		}
	}
	
	// загружает связи события
	public static function select($event_id, $categ = null)
	{
		self::init();
		
		$links = array();
		$sql =
			"SELECT eu.id, eu.categ, eu.event_id, eu.user_id, e.user_id event_user_id, ".
				"eu.dt, eu.note, u.username, u.face ".
			  "FROM event_users eu, users u, events e ".
			 "WHERE eu.event_id = $event_id AND u.id = eu.user_id AND e.id = eu.event_id ";
		if(!is_null($categ)) $sql .= "AND eu.categ = '$categ' ";
		$sql .= "ORDER BY eu.dt";
		
		if(LOG_SQL)
			Logger::Write(__FILE__." ".__FUNCTION__." line: ".__LINE__, $sql);
			
		$res = self::$db->query($sql);
		while($row = self::$db->fetch_assoc($res))
		{
			$row['note'] = Utils::safe_decode($row['note']);
			$links[] = $row;
		}
		self::$db->free_result($res);
		return $links;
	}
	
	// загружает связь по ее ID
	public static function get($link_id)
	{
		if(is_null($link_id)) return FALSE;
		
		self::init();
		$sql =
			"SELECT eu.id, eu.categ, eu.event_id, eu.user_id, e.user_id event_user_id, ".
				"eu.dt, eu.note, u.username, u.face ".
			  "FROM event_users eu, users u, events e ".
			 "WHERE u.id = eu.user_id AND e.id = eu.event_id AND eu.id = $link_id";
		
		if(LOG_SQL)
			Logger::Write(__FILE__." ".__FUNCTION__." line: ".__LINE__, $sql);
			
		$res = self::$db->query($sql);
		$row = self::$db->fetch_assoc($res);
		$row['note'] = Utils::safe_encode($row['note']);
		$link = $row;
		self::$db->free_result($res);
		return $link;
	}
	
	private static $db = null;

}